Deadline: The printed version of your work must be handed in to the departmental office by noon Friday 15th December 2000 (the last day of term). In addition, a version should be submitted electronically using the handin program (details will be emailed closer to the deadline). Note that the electronically submitted version of your program will be run through an automated plagiarism detector.
Aim: You are asked to write a program of greater complexity than those you have typically been writing to answer the Exercise questions. Your program should consist of a small number of classes (not just one), that properly declare instance variables, instance methods and constructors. Your program should run by creating objects and calling their methods, and objects calling each other's methods. The design of your program will require more thought and planning, as well as thinking in terms of classes and objects.
With the printed version of your program you must submit an UML class diagram, documenting the classes and their relationships within your program. A hand drawn diagram is entirely acceptable.
Make sure you read chapters 9 and 10 in the text book.
Marking: The work will be graded A-F.
On this scheme a grade C is
considered to be basically satisfactory which means the program runs, does the
more or less the right things and has a reasonable design using classes. Grades
B and A represent better and excellent programs, while D and E are progressively
less good programs that show serious problems in execution and/or design. Grade
F means a failure to present anything of merit.
Getting a good grade: Marking will take into account the quality of the program you write. In particular pay attention to the following:
A clean simple working program, making good use of classes and objects, is considered better than a larger and more complex but less well-organised program.
Development Advice:
Below are listed a number of mini-project ideas. You must select one and notify me by email which one you have chosen — do this by sending an email to G.Roberts@cs.ucl.ac.uk and in the subject line put: '1B11 MiniProject 1 Question <n>'. Replace the <n> with the number of the question you are doing!
The projects are rated using Easy, Medium and Hard.
An Easy project is
easier to do but must be done well to get a higher grade.
A Medium project is
more demanding, so producing a reasonable working solution is more likely to get
a higher grade.
A Hard project is even more demanding, so working solutions
will given appropriate credit.
The project descriptions are deliberately fairly open-ended, providing scope for the project idea to be extended if you feel able.
1. Write a bank program to manage a collection of bank accounts. It should
allow the user open and close accounts, to enter credits and debits and keep a
current balance. It will be interactive, of course. See whether you can get it
to store records in files. What about setting up direct debits, interest
payments and anything else you can think of?
Difficulty: Easy (see chapter 10
in the text book), so harder to get a high grade.
2. The owner of a snack bar wants a system which will allow a menu, with
prices, to be built up, items added, deleted and prices adjusted. The system
should also allow the owner to enter a customer's order and get a display of the
bill, with the total price. Obviously the system will be interactive. It should
be possible to store menus and bill information in files.
Difficulty:
Easy
3. Write a program that might be used by a newsagent shop to store
information about which papers are delivered to which customers on the paper
routes organised by the newsagent. It should be possible to add and remove
papers for a specific customer, and display the summary of papers needed for
each paper route. The program should keep track of the amount of money owed by
each customer and record payments made. Files should be used to store the
program's data.
Difficulty: Easy
4. Write a drawing program to display mazes. A maze should have a single path
through it or from middle to outside. Try displaying large mazes.
Difficulty:
Medium
5. Write a program that will take a representation of a grid of dots, say 10
by 10, and decide which letter of the alphabet it represents (i.e., do pattern
recognition). The pattern might have some distortion, interference and
ambiguity, and the program should be able to deal with this.
Difficulty:
Medium (needs creative thought)
6. "Eliza" is a famous program from the history of computing, which fooled
people into believing that it understood natural language. The original system
was intended to be a psychoanalyst which held conversations with a patient.
Typical exchanges would be something like:
Eliza: Hello. Would you like to
talk with me?
User: Yes.
E: How are you feeling today?
U: Not too
good.
E: Why are you feeling not too good?
U: My father yelled at me
yesterday.
E: Why did your father yell at you yesterday?
U: I made him
angry.
E: Don't you like your father?
U: He makes me nervous.
E: Why
does he make you nervous?
and so on.
All that the program is really doing
is looking for key words (I, father, mother and so on) and also matching
templates and converting them:me -> you, I -> you, you -> I or me,
depending on object/subject of verb, my -> your, mine -> yours, ...ed
(verb) -> Why did ... and so on. When no template matched the system just
produced a random stock question or prompt. Develop a similar system. See how
sophisticated you can make it by adding more complex templates. The hardest part
will be identifying sentence structures. Verbs could be recognised stupidly
(have a dictionary of common verbs with their forms) or more intelligently
(parse simple sentences into noun phrases and verb phrases).
Difficulty:
Medium
7. Write a program to play 3-dimensional noughts-and-crosses on a 4x4x4
board, with a human user. Your program should play a challenging
game.
Difficulty: Hard.
8. A good spell-checker should be able to not only identify words that are
incorrectly spelt, but also suggest corrected versions. Write a program which
will take as input a word and will check whether it is correctly spelt and if
not, what might be correct versions. You should concentrate on deciding what
might be correct spellings, rather than on building up a huge dictionary, even
though this will restrict the vocabulary that your program can recognise.
Difficulty: Hard.
9. Write an interactive calculator program that works entirely with Roman
Numerals, including all the operations to do the arithmetic (i.e., do not
convert roman numerals to decimal integers and back in order to do the
arithmetic operations).
Difficulty: Hard